#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "http.h"
#include <QFile>
#include <qdebug.h>
#include <QDate>
#include<QPixmap>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QPainter>
#include<QDateTime>
#include"jinan.h"
#include"scut.h"
#include"scau.h"
#include"gzhu.h"
#include"gdut.h"
using namespace std;


MainWindow::~MainWindow()
{
    delete ui;
}

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{
    //创建数据库
    db=new database ();


        ui->setupUi(this);


       setWindowIcon(QIcon(":/res/icon.png"));
       init_ui();
/*
            //设置背景
            QPalette background;
            background.setBrush(QPalette::Background, QBrush(QPixmap(":/../../icon.png")));
            this->setPalette(background);
*/

            //更新数据

            //if(!update())
            //    qDebug()<<"update http information failed";


       //展示数据库
       //db->show();
       //db->show_notice();
       db->getRowNum();
       db->getRowNum_notice();
       //show_ui();

       init_ui_flag=false;
       init_ui_flag_p=false;
}

void MainWindow::paintEvent(QPaintEvent *)
{


    QPainter painter(this);
    QPixmap pixmap;
    pixmap.load(":/res/res/background2.jpg");
    painter.drawPixmap(0, 0, this->width(), this->height(), pixmap);

    if(init_ui_flag_p){
    //初始化界面
    if(!init_ui_flag){
            init_ui_flag=true;
        qDebug()<<"debug1";
    if(database_inited)
    {
        show_ui();
        qDebug()<<"QTableView 被展示了";
    }
    else {
        /*
        QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,"Tips", "数据库未更新，无法展示。",QMessageBox::Close,this);
            //QMessageBox::information(NULL, "Tips", "数据库未更新，无法展示。");
        messageBox->show();
*/
        QMessageBox messageBox(QMessageBox::NoIcon,
                               "Tips", "首次启动软件，请先点击更新按钮。",
                               QMessageBox::Ok, NULL);
        int result=messageBox.exec();

        ;//弹出未初始化窗口
        qDebug()<<"数据库尚未初始化，无法展示";
    }
    //file.close();
    }
    }
    init_ui_flag_p=true;
}

 bool MainWindow::init_ui()
 {
/*
     setWindowFlags(windowFlags()&~Qt::WindowMaximizeButtonHint);    // 禁止最大化按钮
     setFixedSize(this->width(),this->height());                     // 禁止拖动窗口大小
*/

     //初始化combobox标记的 index值的容器
     sort_by_time="notice_time desc";
     select_type=" title LIKE '%' ";
     select_college= QString("college LIKE '%'");



     QSqlQuery query(db->getDataBase());
     query.exec("select * from system");
     query.last();
     QString temp=query.value(0).toString();
     qDebug()<<"最后时间："<<temp;
     ui->time_QLabel->setText(temp);

     if(temp=="")
     {
     database_inited=false;
     }
     else {
         database_inited=true;
     }



 }

bool MainWindow::show_ui()
{


    model = new QSqlQueryModel(this);


    QSqlQuery query(db->getDataBase());
    bool ok=db->getDataBase().open();
    if(ok)
        qDebug()<<"db open success";
    else
        qDebug()<<"db open fail";


    qDebug()<<"select Debug"<<select_type<<" "<<select_college;

    //搜索框功能
    QString search_text=ui->lineEdit->text();
    QString search_str="";
    if(search_text=="")
        search_str="(title LIKE '%')";
    else {
        search_str=QString("(title LIKE '%%1%')").arg(search_text);
    }


    QString str = QString("select * from information_list where %1 and %2 and %3 order by %4").arg(select_type).arg(select_college).arg(search_str).arg(sort_by_time);



        query.exec(str);


    //排序功能
    ui->tableView->setSortingEnabled(true);

     ui->tableView->horizontalHeader()->setStretchLastSection(true); //设置充满表宽度


     int qtableView_columnSize=ui->widget->width()-90;//这里减去layout留下来的间隙（左右各一）和列索引占的宽度

     qDebug()<<"表格宽度"<<qtableView_columnSize/7;
    ui->tableView->horizontalHeader()->setDefaultSectionSize(qtableView_columnSize/7);//可以设置tableview所有列的默认列宽



    qDebug() << "status" << db->getDataBase().isOpen();
    model->setQuery(query);
    model->setHeaderData(0,Qt::Horizontal,tr("报告题目"));
    model->setHeaderData(1,Qt::Horizontal,tr("讲座人"));
    model->setHeaderData(2,Qt::Horizontal,tr("报告时间"));
    model->setHeaderData(3,Qt::Horizontal,tr("报告地点"));
    model->setHeaderData(4,Qt::Horizontal,tr("报告大学"));
    model->setHeaderData(5,Qt::Horizontal,tr("报告链接"));
    model->setHeaderData(6,Qt::Horizontal,tr("通知时间"));




   // ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);


    ui->tableView->setModel(model);




    //设置view中的数学库不允许修改
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

}



void MainWindow::on_updateButton_clicked()
{
/*
    static QMessageBox messageBox(QMessageBox::NoIcon,"Tips", "数据更新中，请稍候。",QMessageBox::Ok, NULL);
    //messageBox.setStandardButtons(0);

    messageBox.show();
   */


  process=new QProgressDialog();

  //设置标题，可以不设置默认继承父窗口标题
  process->setWindowTitle(QStringLiteral("请稍候"));
  process->setLabelText(tr("正在更新数据库内容..."));
  process->setCancelButton(0);
  process->setFixedSize(500,100);
  process->setRange(0,100);
  process->setModal(true);
  process->setValue(5);
//process.setCancelButtonText(tr("cancel"));

  process->show();




   update();

  process->close();
  delete process;

   //更新最后更新时间
   QDateTime *datatime=new QDateTime(QDateTime::currentDateTime());
   QString temp = datatime->toString(" yyyy-MM-dd hh:mm:ss ddd"); //设置显示格式
   QSqlQuery query(db->getDataBase());
   qDebug()<<"系统时间"<<temp;
   query.exec("delete from system");//插入前删除以前的日期数据（删除了整个system表中所有数据，保留表结构）
   db->getRowNum_system();
   db->insert_system(temp);

   query.exec("select * from system");
   query.last();
   QString temp2=query.value(0).toString();
   qDebug()<<"最后时间："<<temp2;
   ui->time_QLabel->setText(temp2);



    database_inited=true;



    /*
    bool b1=messageBox.close();//关闭请稍后窗口
    qDebug()<<"close:"<<b1;
*/


    //设置更新完成窗口
    //QMessageBox messageBox1(QMessageBox::NoIcon,"Tips", "数据更新已完成！", QMessageBox::Ok, NULL);
    //int result1=messageBox1.exec();

    show_ui();

    QMessageBox::information(NULL, "Tips", "数据更新已完成！");

}


//showButton已经由展示按钮改成了搜索按钮
void MainWindow::on_showButton_clicked()
{

    if(database_inited)
    {
        show_ui();
        qDebug()<<"QTableView 被展示了";
    }
    else {
        /*
        QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,"Tips", "数据库未更新，无法展示。",QMessageBox::Close,this);
            //QMessageBox::information(NULL, "Tips", "数据库未更新，无法展示。");
        messageBox->show();
*/
        QMessageBox messageBox(QMessageBox::NoIcon,
                               "Tips", "数据库未更新，无法展示。",
                               QMessageBox::Ok, NULL);
        int result=messageBox.exec();

        ;//弹出未初始化窗口
        qDebug()<<"数据库尚未初始化，无法展示";
    }
}



void MainWindow::on_query_comboBox_currentIndexChanged(int index)
{
    qDebug()<<"现在选择的排序类型的index"<<index;

    switch(index)
    {
    case 0:
        sort_by_time="notice_time desc";
        break;
    case 1:
        sort_by_time="time desc";
        break;
    }


    show_ui();
}

void MainWindow::on_select_comboBox_currentIndexChanged(int index)
{
    qDebug()<<"现在选择的科目类型的index"<<index;
    switch (index)
    {
    case 0:
        select_type=" title LIKE '%' ";
        break;
    case 1:
        select_type=" (title LIKE '%生物%' OR title LIKE '%生命%' OR title LIKE '%biolog%' OR title LIKE '%live%')";
         qDebug()<<"选择密码学成功";
        break;
    case 2:

        select_type=" (title LIKE '%数学%' OR title LIKE '%数字%' )";
        break;
    case 3:

        select_type="  (title LIKE '%信息%' OR title LIKE '%通信%' OR title LIKE '%智能%') ";
        break;

    }

    show_ui();
}

//大学选项的槽函数，忘了修改函数名了。
void MainWindow::on_comboBox_currentIndexChanged(const QString &arg1)
{

    if(arg1=="全部")
    {

        select_college= QString("college LIKE '%'");
    }
    else
    {
    select_college= QString("(college='%1')").arg(arg1);
    }
    qDebug()<<"select_college="<<select_college;
    show_ui();
}


//将信息抓取部分同学的代码分离出来，便于实现更新和实现的分离
bool MainWindow::update()
{


    //下面获取暨南大学学术报告信息

    jinan* j1 = new  jinan(db);
    j1->dealing();

process->setValue(20);

//下面获取华南理工大学的
scut *scut1=new scut(db);
scut1->dealing();

process->setValue(40);



//获取华南农业大学信息学院学术报告信息

scau *scau1= new scau(db);
scau1->dealing();

process->setValue(60);


//获取广州大学信息学院学术报告信息
gzhu *gzhu1= new gzhu(db);
gzhu1->dealing();

process->setValue(80);

//获取暨南大学信息学院学术报告信息
gdut *gdut1= new gdut(db);
gdut1->dealing();

process->setValue(100);

    return true;
}


